package api

import (
	"firstdemo_go/model"
	"firstdemo_go/model/response"
	"firstdemo_go/service"
	"fmt"
	"github.com/gin-gonic/gin"
)

/*
	用go语言编写一个服务，接受http请求，这个服务提供如下http接口，所有接口均为post请求，接受和返回的数据都是json格式，
	所有接口请求成功返回{"ret":1, "data":xxx}，其中data有可能为空；
	失败返回{"ret":-1, "msg":"xxx"}
*/

func AddPerson(c *gin.Context) {
	// 添加接口，请求数据格式为{"key":"xxx", "value":"xxx"}
	var data model.Data
	_ = c.ShouldBind(&data)
	if err := service.AddPerson(data); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func DeletePerson(c *gin.Context) {
	// 删除接口，请求数据格式为{"keys":["xxx",...]}
	var data int64
	_ = c.ShouldBind(&data)
	if err := service.DeletePerson(data); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func UpdatePerson(c *gin.Context) {
	// 修改接口，请求数据格式为{"key":"xxx", "value":"xxx"}
	var data model.Person
	_ = c.ShouldBind(&data)
	if err := service.UpdatePerson(data, data.Id); err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithData(nil, c)
}

func FindPerson(c *gin.Context) {
	// 查询接口，请求数据格式为{"keys":["xxx",...]}，返回的结果data里面表示所有查询到的key，
	//"data":{"key1":"value1", "key2":"value2"}
	var data int64
	_ = c.ShouldBind(&data)
	if res, err := service.FindPerson(data); err != nil {
		response.Result(1, res, "查了一个", c)
	} else {
		response.OkWithData(res, c)
	}
}

func ListPerson(c *gin.Context) {
	// 查询接口，请求数据格式为{"keys":["xxx",...]}，返回的结果data里面表示所有查询到的key，
	//"data":{"key1":"value1", "key2":"value2"}
	var datas []model.Person
	var nummsg string
	_ = c.ShouldBind(&datas)
	if res, num, err := service.ListPerson(datas, 5); err != nil {
		response.Result(1, res, fmt.Sprintf(nummsg, num), c)
	} else {
		response.OkWithData(res, c)
	}
}
